package cn.tm.ms.nerver.restful.tools;

import java.util.List;
import java.util.Map;

import com.alibaba.fastjson.JSON;

/**
 * json处理工具
 * 
 * @author lry
 * 
 *       jackson 的注解:
 *       <p>
 *       •@JsonIgnoreProperties 此注解是类注解，作用是json序列化时将java
 *       bean中的一些属性忽略掉，序列化和反序列化都受影响。<br/>
 *       •@JsonIgnore此注解用于属性或者方法上（最好是get方法上），作用和上面的@JsonIgnoreProperties一样。<br/>
 *       •@JsonFormat此注解用于属性或者方法上（最好是get方法上），可以方便的把Date类型直接转化为我们想要的模式，比如@JsonFormat
 *       (pattern = "yyyy-MM-dd HH-mm-ss")<br/>
 *       •@JsonSerialize此注解用于属性或者getter方法上，用于在序列化时嵌入我们自定义的代码，
 *       比如序列化一个double时在其后面限制两位小数点。<br/>
 *       </p>
 * @see http://blog.csdn.net/nomousewch/article/details/8955796
 */
public class JsonTools {

	public static String beanToJson(Object o) {
		return JSON.toJSONString(o);
	}

	@SuppressWarnings("unchecked")
	public static <T>T jsonToBean(String json, Class<?> clazz) {
		try {
			return (T) JSON.parseObject(json, clazz);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}

	@SuppressWarnings("unchecked")
	public static Map<String, Object> beanToMap(Object o) {
		try {
			return (Map<String, Object>) JSON.parse(JSON.toJSONString(o));
		} catch (Exception e) {
			return null;
		}
	}

	@SuppressWarnings("unchecked")
	public static Map<String, Object> jsonToMap(String json) {
		return (Map<String, Object>) JSON.parse(json);
	}

	public static String listToJson(List<Map<String, String>> list) {
		return JSON.toJSONString(list);
	}

	@SuppressWarnings("rawtypes")
	public static List<Map> jsonToList(String json) {
		return JSON.parseArray(json, Map.class);
	}
}